#include<iostream>
#include<string>
#include<cstdio>
#include<string.h>
#include<errno.h>
#include<cstdlib>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>


int fun()
{
	std::cout<<"hello world"<<std::endl;
	//exit(100);
	return 100;
}

int main()
{

	pid_t id = fork();
	if(id<0)
	{
		printf("errno : %d, errstring: %s\n", errno, strerror(errno));
		return errno;
	}

	else if(id == 0)
	{
		int cnt = 5;
		while(cnt)
		{
			printf("子进程运行中, pid: %d\n",getpid());
			cnt--;
			sleep(1);
		}
		//int *p = nullptr;
		//*p = 100;

		exit(123);
	}

	else
	{	
		//sleep(6);
		//pid_t rid = wait(nullptr);
		//pid_t rid = waitpid(-1,nullptr,0);//第一个参数为-1表示等待任何一个子进程
		
		int status = 0;
		pid_t rid = waitpid(id,&status,0);//第一个参数为-1表示等待任何一个子进程
		
		if(rid>0)
		{
			if(WIFEXITED(status))
			{
				printf("wait sub process success, rid: %d, status code: %d\n",rid,WEXITSTATUS(status));
			}
			else
			{
				printf("child process quit error!");
			}
		//	printf("waut sub process success, rid: %d ,status code: %d , exit signal: %d\n",rid,status>>8,status&0x7F);
		}
		else
		{
			perror("waitpid");
		}
		while(true)
		{
			printf("我是父进程: pid:%d\n",getpid());
			sleep(1);
		}

	}






//	fun();
//	printf("程序运行结束");
//	sleep(2);
//	exit(23);

//	for(int i = 0;i<200;i++)
//	{
//		std::cout<<"code :"<< i <<", errstring: "<<strerror(i) << std::endl;
//	}



//	printf("before: errno : %d, errstring: %s\n", errno, strerror(errno));
//
//	FILE *fp = fopen("./log.txt","r");
//	if(fp==nullptr)
//	{
//		printf("before: errno : %d, errstring: %s\n", errno, strerror(errno));
//		return errno;
//	}
//
	return 10;
}
